#! /bin/bash

PLAY_HOME=/opt/playground

# 检查集群网络配置
function check_network()
{
    # 读取存储IP的文件
    while read line; do
        # 提取文件中的ip
        ip=$(echo $line | cut -d " " -f1)
        # 提取文件中的hostname
        hostname=$(echo $line | cut -d " " -f2)
        # 提取文件中的用户名
        user_name=$(echo $line | cut -d " " -f3)
        # 提取文件中的密码
        pass_word=$(echo $line | cut -d " " -f4)
        
        echo "IP: $ip"
        echo "Hostname: $hostname"
        echo "Username: $user_name"
        echo "Password: $pass_word"
        
        echo "======================================="
        
    done < "$PLAY_HOME/host_ip.txt"
    
    
    # 提示客户确认信息是否正确
    confirm=""
    while [ "$confirm" != "y" ] && [ "$confirm" != "n" ]; do
        read -p "请确认以上信息是否正确 (y/n): " confirm
    done
    
    if [ "$confirm" == "n" ]; then
        echo "请使用playground nodes update命令更新网络信息。"
        exit 1
    fi
    
}


# 安装前检查jdk配置
check_jdk() {
    # 检查是否有jdk的配置
    if grep -q "jdk" "$PLAY_HOME/frames.txt"; then
        echo "已配置jdk安装信息："
        
        javaInfo=`egrep "^jdk" $PLAY_HOME/frames.txt`
        
        package=`echo $javaInfo | cut -d " " -f1`
        isInstall=`echo $javaInfo | cut -d " " -f2`
        nodes=`echo $javaInfo | cut -d " " -f3`
        
        
        if [ "$isInstall" == "true" ]; then
            echo "安装包名: $package"
            echo "需要安装的所有节点: $nodes"
            
            echo "======================================="
            
            # 检查是否有同名的安装包
            if [ -f "$PLAY_HOME/frames/$package" ]; then
                echo "在$PLAY_HOME/frames目录下找到了$package 安装包。"
            else
                echo "在$PLAY_HOME/frames目录下没有找到$package 安装包。"
                echo "请使用playground add $package 命令添加安装包。"
                exit 1
            fi
        fi
        
        echo "======================================="

        # 提示用户是否需要修改
        read -p "是否需要修改jdk安装信息？（y/n）：" modify
        
        if [ "$modify" == "y" ]; then
            echo "请使用playground config jdk命令进行配置。"
            exit 1
        fi
    else
        echo "frames.txt文件中没有jdk的安装配置。"
        echo "请使用playground config jdk命令进行配置。"
        exit 1
    fi
}

function clusterOperate()
{
    
    # 检查集群网络配置
    check_network

    jdk_bool=1
    
    # 提示用户是否需要安装JDK
    read -p "是否需要安装JDK？(yes/no): " choice
    if [ "$choice" = "yes" ]; then
        # 检查集群jdk配置
        check_jdk
    else
        echo "skip jdk"
        jdk_bool=0
        # 在这里可以继续执行其他操作
    fi
    
    
    current_host=`hostname`
    
    # 移动安装包到/opt/frames下
    #  echo "移动安装包到/opt/frames下"
    #  mv /home/hadoop/automaticDeploy/frames /opt/
    
    # 本地初始化
    $PLAY_HOME/systems/batchOperate.sh $jdk_bool
    
    #1.遍历主机列表
    while read line;
    do
        hostname=`echo $line | cut -d " " -f2`
        echo "目前正在设置$hostname节点的系统环境"
        
        #为其它远程主机复制文件
        if [[ $hostname != $current_host ]]
        then
            #3.远程主机操作
            if ssh -n $hostname test -e $PLAY_HOME
            then
                #3.1 存在则先删除旧的
                ssh -n $hostname "rm -rf $PLAY_HOME"
            fi
            
            ssh -n $hostname "mkdir -p $PLAY_HOME"
            
            #3.2 把本地的automaticDeploy里面的脚本文件复制到远程主机上
            scp -r $PLAY_HOME $hostname:/opt/
            
            #3.3 把本地的/opt/frames里的软件安装包复制到远程主机的/opt/frames上
            #判断远程主机上/opt/frames是否存在，不存在则创建
            if ssh -n $hostname test -e $PLAY_HOME/soft/;then
                echo "$PLAY_HOME/soft/已经存在" > /dev/null
            else
                ssh -n $hostname "mkdir $PLAY_HOME/soft"
            fi
            
            # 安装包分发
            # scp -r $PLAY_HOME/soft/* $hostname:$PLAY_HOME/soft/
            
            #遍历需要安装的软件
            # while read lineString;
            # do
            #   software=`echo $lineString | cut -d " " -f1`
            #   isInstall=`echo $lineString | cut -d " " -f2`
            #   if [[ $isInstall = "true" ]];then
            #       if ssh -n $hostname test -e /opt/frames/$software;then
            #           echo "安装包已存在" > /dev/null
            #       else
            #           scp /opt/frames/$software $hostname:/opt/frames/$software
            #       fi
            #   fi
            # done < /home/hadoop/automaticDeploy/frames.txt
            
            #4.远程执行文件
            ssh -n $hostname $PLAY_HOME/systems/batchOperate.sh $jdk_bool
        fi
    done < $PLAY_HOME/host_ip.txt
    
    # 添加初始化成功标志位
    echo "1" > $PLAY_HOME/I_SUCCESS
}

clusterOperate
